<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;

class Test extends Controller
{
    public function index()
    {
        // 快捷查询
//        $row = Db::table('user')
////            ->where('id', 5)
//            ->where('id', '=', 5)
//            ->find();

//        $row = Db::table('user')
////            ->where('id', '<=', 5)
//            ->where('id', 'in', [1,3,5,6])
//            ->select();

//        $row = Db::table('user')
//            ->where(['sex' => 2])
//            ->whereOr(['province' => '上海'])
//            ->select();

        // 批量查询
//        $row = Db::table('user')
//            ->where([
//                'id' => ['between', '10,20'],
//                'sex' => ['eq', '0']
//            ])
//            ->select();

//        $row = Db::table('user')
//            ->where('sex', 'eq', '0')
//            ->where(
//                'id', ['between', '1,3'], ['in', [6, 66]], 'or'
//            )
//            ->select();

//        // 区间查询
//        $row = Db::table('user')
//            ->where('id', ['>', 2], ['<', 10])
//            ->select();

        // 多表手动查询
//        $row = Db::field('u.name uname, l.name lname')
//            ->table(['user'=>'u', 'lover'=>'l'])
//            ->where('u.id = l.user_id')
//            ->select();
        /*
         SELECT ??? FROM ??? WHERE ???
         */

//        // JOIN 多表查询
//        $row = Db::table('user')
//            ->alias('u')
//            ->field(['u.name'=>'un', 'l.name'=>'ln'])
//            ->join('lover l', 'u.id=l.user_id') // 内连接
////            ->join('lover l', 'u.id=l.user_id', 'RIGHT') // 右连接
//            ->order('un')
//            ->select();

//        // 视图查询
//        // 仅支持多表的查询操作,多表的增删改需要使用关联模型
//        // view('数据表', '字段', '表JOIN', 'JSON方式')
//        $row = Db::view('user', ['name'=>'uname','sex'])
//            ->view('lover', ['name'=>'lname'], 'user.id = lover.user_id')
//            ->select();

        // 聚合查询
//        $row  = Db::table('user')->avg('age');

//        // 各个省份分别有多少人
//        $row = Db::table('user')
//            ->field('province, count(id)')
//            ->group('province')
//            ->select();

//        // 各个省份内的人都是谁
//        $row = Db::table('user')
//            ->field('province, group_concat(name) proname')
//            ->group('province')
//            ->select();

        // 子查询
        // fetchSql 方式
        // 1. 构建子SQL
        // $query = Db::table('hc_user')
        //     ->field('id,name,sex,age')
        //     ->where('sex', 'eq', 0)
        //     ->fetchSql(true)
        //     ->select();
        // // var_dump($query); // 直接返回SQL.不执行
        // // 2. 组装完整的SQL去执行
        // $row = Db::table('('.$query.') u')
        //     ->where('u.age', 'gt', '18')
        //     ->order('id', 'desc')
        //     ->select();
        
        // buildSql 方式
        // 1. 构建子SQL
        $query = Db::table('hc_user')
            ->field('id,name,sex,age')
            ->where('sex', 'eq', 0)
            ->buildSql();
        // var_dump($query); // 直接返回SQL.不执行
        // 2. 组装完整的SQL去执行
        $row = Db::table($query. ' u')
            ->where('u.age', 'lt', '18')
            ->order('id', 'desc')
            ->select();
        var_dump($row);
    }
}
